<?php
class Email {
    public $loc_host='linux';
    public $smtp_acc='uxin001@126.com';
    public $smtp_pass='uxin001_123';
    public $smtp_host='smtp.126.com';
    public $smtp_port=25;
    public $from='uxin001@126.com';
   
    public $to;
    public $subject;
    public $body;
    
    public function __construct($to,$subject,$body){
        $this->to=$to;
        $this->subject=$subject;
        $this->body=$body;
    }
    
    public function send()
    {
        $loc_host = $this->loc_host; //发信计算机名，可随意 
        $smtp_acc = $this->smtp_acc;#"mailzsm@126.com"; //Smtp认证的用户名，类似fish1240@fishcat.com.cn，或者fish1240 
        $smtp_pass = $this->smtp_pass;# ""; //Smtp认证的密码，一般等同pop3密码 
        $smtp_host = $this->smtp_host;#"smtp.126.com"; //SMTP服务器地址，类似 smtp.tom.com 
        $from = $this->from;#"mailzsm@126.com"; //发信人Email地址，你的发信信箱地址 
        
        $to=$this->to;
        $subject = $this->subject;
        $body = $this->body;        
        $headers = "Content-Type: text/plain; charset=\"utf-8\"\r\nContent-Transfer-Encoding: base64";
        $lb = "\r\n"; //linebreak         

        $hdr = explode ( $lb, $headers ); //解析后的hdr 
        if ($body) {
            $bdy = preg_replace ( "/^\./", "..", explode ( $lb, $body ) );
        } //解析后的Body         

        $smtp = array (//1、EHLO，期待返回220或者250 
            array ("EHLO " . $loc_host . $lb, "220,250", "HELO error: " ), //2、发送Auth Login，期待返回334 
            array ("AUTH LOGIN" . $lb, "334", "AUTH error:" ), //3、发送经过Base64编码的用户名，期待返回334 
            array (base64_encode ( $smtp_acc ) . $lb, "334", "AUTHENTIFICATION error : " ), //4、发送经过Base64编码的密码，期待返回235 
            array (base64_encode ( $smtp_pass ) . $lb, "235", "AUTHENTIFICATION error : " ) 
        );        
        $smtp [] = array ("MAIL FROM: <" . $from . ">" . $lb, "250", "MAIL FROM error: " );//5、发送Mail From，期待返回250         
        $smtp [] = array ("RCPT TO: <" . $to . ">" . $lb, "250", "RCPT TO error: " );//6、发送Rcpt To。期待返回250         
        $smtp [] = array ("DATA" . $lb, "354", "DATA error: " );//7、发送DATA，期待返回354         
        $smtp [] = array ("From: " . $from . $lb, "", "" );//8.0、发送From         
        $smtp [] = array ("To: " . $to . $lb, "", "" );//8.2、发送To         
        $smtp [] = array ("Subject: " . $subject . $lb, "", "" );//8.1、发送标题 
        
        foreach ( $hdr as $h ) {//8.3、发送其他Header内容 
            $smtp [] = array ($h . $lb, "", "" );
        }        
        $smtp [] = array ($lb, "", "" );//8.4、发送一个空行，结束Header发送         
        if ($bdy) {//8.5、发送信件主体 
            foreach ( $bdy as $b ) {
                $smtp [] = array (base64_encode ( $b . $lb ) . $lb, "", "" );
            }
        }        
        $smtp [] = array ("." . $lb, "250", "DATA(end)error: " );//9、发送“.”表示信件结束，期待返回250         
        $smtp [] = array ("QUIT" . $lb, "221", "QUIT error: " );//10、发送Quit，退出，期待返回221  
        
        $fp = @fsockopen ( $smtp_host, $this->smtp_port );//打开smtp服务器端口 
        if (! $fp)
            echo "<b>Error:</b> Cannot conect to " . $smtp_host . "<br>";
        while ( @$result = @fgets ( $fp, 1024 ) ) {
            if (substr ( $result, 3, 1 ) == " ") {
                break;
            }
        }        
        $result_str = "";        
        foreach ( $smtp as $req ) {//发送smtp数组中的命令/数据             
            @fputs ( $fp, $req [0] );//发送信息             
            if ($req [1]) {//如果需要接收服务器返回信息，则接收信息                 
                while ( @$result = @fgets ( $fp, 1024 ) ) {
                    if (substr ( $result, 3, 1 ) == " ") {
                        break;
                    }
                }                
                if (! strstr ( $req [1], substr ( $result, 0, 3 ) )) {
                    $result_str .= $req [2] . $result . "<br>";
                }
            }
        }
        
        @fclose ( $fp );//关闭连接 
        return $result_str;
    }
}
class PHPEmail 
{
    function __construct($subject, $message, $senderName, $senderEmail, $toList, $ccList = 0, $bccList = 0, $replyTo = 0) {
        $this->sender = $senderName . " <$senderEmail>";
        $this->replyTo = $replyTo;
        $this->subject = $subject;
        $this->message = $message;
        
        if (is_array ( $toList )) {
            $this->to = join ( $toList, "," );
        } else {
            $this->to = $toList;
        }
        
        if (is_array ( $ccList ) && sizeof ( $ccList )) {
            $this->cc = join ( $ccList, "," );
        } elseif ($ccList) {
            $this->cc = $ccList;
        }
        
        if (is_array ( $bccList ) && sizeof ( $bccList )) {
            $this->bcc = join ( $bccList, "," );
        } elseif ($bccList) {
            $this->bcc = $bccList;
        }
    
    }
    
    function send() 
    {        
        $this->headers = "MIME-Version: 1.0\r\n";
        $this->headers .= "Content-type: text/html; charset=big5\r\n";
        $this->headers .= "From: " . $this->sender . "\n";
        if ($this->replyTo) {
            $this->headers .= "Reply-To: " . $this->replyTo . "\n";
        }
        
        if (! empty ( $this->cc )) {
            if ($this->cc) {
                $this->headers .= "Cc: " . $this->cc . "\n";
            }
        }
        
        if (! empty ( $this->bcc )) {
            if ($this->bcc) {
                $this->headers .= "Bcc: " . $this->bcc . "\n";
            }
        }
        
        return mail ( $this->to, $this->subject, $this->message, $this->headers );
    }
}